params = {
    'client_num': 4,              # 老人数量上限
    'caregiver_num': 5,          # 护理人员数量上限
    'population_size': 20,        # 遗传算法种群大小
    'crossover_rate': 0.3,        # 交叉率
    'mutation_rate': 0.115,       # 变异率
    'phenotype_limit': 200,       # 最大迭代代数
    'elimination_size': 5,         # 每代淘汰数量
    'initial_temperature': 100.0,  # 模拟退火初始温度
    'cooling_rate': 0.995,        # 温度冷却率
    'time_slots_per_day': 72,  # 新增参数，表示一天中的时间槽数量
    'time_interval_minutes': 20,  # 新增参数，表示每个时间槽的分钟数
    'caregiver_availability_weight': 0.3,  # 护理员可用性在适应度计算中的权重
    'scheduling_conflict_penalty': 50,  # 调度冲突的惩罚值
    'unassigned_slot_penalty': 30,  # 未分配时间段的惩罚值
    'use_algorithm_optimization': True,  # 是否使用算法优化排班方案
    'algorithm_type': 'hybrid',  # 算法类型：'ga'(遗传算法), 'sa'(模拟退火), 'hybrid'(混合算法), 'nsga2'(多目标优化), 'constraint'(约束满足), 'rl'(强化学习)

    # 自动排班参数
    'auto_schedule_enabled': False,  # 是否启用自动排班
    'auto_schedule_interval': 7,  # 自动排班间隔（分钟）

    # 强化学习参数
    'rl_learning_rate': 0.1,  # 学习率
    'rl_discount_factor': 0.9,  # 折扣因子
    'rl_exploration_rate': 0.1,  # 探索率
    'rl_exploration_decay': 0.995,  # 探索率衰减
    'rl_min_exploration_rate': 0.01,  # 最小探索率
}

# 添加三班制排班相关配置
shift_config = {
    'morning_shift': {
        'start_time': '06:00',
        'end_time': '14:00',
        'name': '班次1',  # 早班改为班次1
        'order': 1  # 添加排序字段
    },
    'afternoon_shift': {
        'start_time': '14:00',
        'end_time': '22:00',
        'name': '班次2',  # 中班改为班次2
        'order': 2  # 添加排序字段
    },
    'night_shift': {
        'start_time': '22:00',
        'end_time': '06:00',
        'name': '班次3',  # 夜班改为班次3
        'order': 3  # 添加排序字段
    }
}

# 护理员白天/夜班分配的权重比（默认为黄金分割比1.618）
day_night_ratio = 1.618

# 预留护理资源比例，用于应对新入住老人的临时需求
reserve_resource_ratio = 0.1

# 班制控制参数
shift_control = {
    'enabled_shifts': ['morning_shift', 'afternoon_shift', 'night_shift'],  # 启用的班次
    'min_shifts_per_day': 1,  # 每天最少需要的班次数
    'max_shifts_per_day': 3,  # 每天最多允许的班次数
    'allow_empty_shifts': False,  # 是否允许某些班次为空（没有护理员）
    'shift_sort_method': 'time',  # 班次排序方式: 'time' 或 'order'
    'auto_adjust_time': True,  # 是否自动调整班次时间以覆盖24小时
}

# 三班制排班接口全局参数
three_shift_params = {
    'schedule_type': 1,  # 排班类型: 1(按天), 2(按周), 3(按月), 4(按季度), 5(按年)
    'start_date': '2025-09-09',  # 开始日期，如果为None则使用当前日期，格式为'YYYY-MM-DD'，例如'2023-04-07'
    'num_days': 3,  # 排班天数，当schedule_type为1(按天)时有效
    'shift_start_time': '09:07',  # 班次开始时间，格式为'HH:MM'，例如'06:00'
    'shift_mode': 4,  # 班制数量：1(一班制), 2(二班制), 3(三班制)
    'custom_shifts': [1, 3],  # 自定义班次列表：仅当shift_mode=4时生效
                          # 格式：[班次编号, ...]
                          # 班次编号：1=班次1(早班), 2=班次2(中班), 3=班次3(夜班)
                          # 示例：[1, 3]表示启用班次1和班次3
                          # 示例：[]表示不启用任何班次，将回退到三班制
                          # 示例：[1, 2, 3]表示启用所有班次
    'auto_schedule_minutes': 2,  # 自动排班的分钟数，每隔多少分钟自动进行一次排班
    'auto_schedule_enabled': False,  # 是否启用自动排班
    'auto_schedule_log_file': 'auto_schedule.log',  # 自动排班日志文件，设为None可禁用文件日志
    'auto_schedule_error_retry_minutes': 1,  # 出错后重试的分钟数
    'auto_schedule_days_ahead': 0,  # 自动排班提前天数，0表示为当天生成排班，1表示为明天生成排班
    'auto_schedule_generate_care_timeline': True  # 是否生成照护时间线
}

# 班制模式配置
shift_mode_config = {
    'one_shift': {
        'name': '一班制',
        'shifts': ['morning_shift'],
        'description': '全夤24小时一个班次'
    },
    'two_shift': {
        'name': '二班制',
        'shifts': ['morning_shift', 'night_shift'],
        'description': '全天分为两个班次，每班12小时'
    },
    'three_shift': {
        'name': '三班制',
        'shifts': ['morning_shift', 'afternoon_shift', 'night_shift'],
        'description': '全天分为三个班次，每班8小时'
    },
    'custom': {
        'name': '自定义班制',
        'shifts': [],  # 动态配置
        'description': '自定义班次数量和时间'
    }
}

# 护理员休息时间控制参数
rest_time_control = {
    # 基本休息时间参数
    'min_rest_between_shifts': 8,  # 两个班次之间的最小休息时间（小时）
    'min_rest_after_night_shift': 12,  # 夜班后的最小休息时间（小时）
    'max_consecutive_shifts': 3,  # 最大连续工作班次数

    # 班次转换休息时间（从一种班次转到另一种班次需要的最小休息时间）
    'shift_transition_rest': {
        'morning_shift_to_afternoon_shift': 8,  # 从班次1转到班次2需要的休息时间
        'afternoon_shift_to_night_shift': 10,  # 从班次2转到班次3需要的休息时间
        'night_shift_to_morning_shift': 12,  # 从班次3转到班次1需要的休息时间
        'morning_shift_to_night_shift': 16,  # 从班次1直接转到班次3需要的休息时间
        'afternoon_shift_to_morning_shift': 8,   # 从班次2转到班次1需要的休息时间
        'night_shift_to_afternoon_shift': 10,  # 从班次3转到班次2需要的休息时间
    },

    # 每周工作时间限制
    'max_weekly_work_hours': 40,  # 每周最大工作时间（小时）
    'max_weekly_night_shifts': 3,  # 每周最大夜班次数

    # 特殊休息规则
    'require_weekend_rest': True,  # 是否要求周末至少休息一天
    'max_weekend_shifts_per_month': 2,  # 每月最多的周末班次数

    # 公平性控制
    'balance_shift_distribution': True,  # 是否平衡分配不同类型的班次
    'rotation_pattern': 'forward',  # 轮班模式：'forward'(顺时针), 'backward'(逆时针), 'random'(随机)
}